package titiritero;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import juego.Juego;
import tablero.Posicion;
import titiritero.vista.BotonDeControlador;
import titiritero.vista.GridButton;
import titiritero.vista.VentanaJuego;
import titiritero.vista.VentanaMenu;
import ataques.Atacador;

public class ControladorJuego implements ActionListener {

    VentanaMenu ventanaMenu;
    VentanaJuego ventanaJuego;
    static Juego juego;

    public void comenzarJuego() {

        ventanaMenu = new VentanaMenu(this);
        ventanaJuego = ventanaMenu.getVentanaJuego();
    }

    public void actionPerformed(ActionEvent e) {
        BotonDeControlador boton = (BotonDeControlador) e.getSource();
        boton.realizarAccion(this, e);
    }

    public void nuevoJuego() {
        juego = new Juego();
        juego.setUp();
        ventanaJuego.setVistas(juego.getVistasBarcos());
        ventanaJuego.dibujar(juego.getTablero(), juego.getPuntos(), juego.getCantidadTurnos());
        ventanaMenu.mostrarJuego();
    }

    public void pasarTurno(ActionEvent e) {
        GridButton casillero = (GridButton) e.getSource();
        Atacador ataque = ventanaJuego.getAtaque();
        ataque.setPosicion(new Posicion(casillero.fila + 1, casillero.columna + 1));
        juego.lanzarAtaque(ataque);
        juego.pasarTurno();
        if ((juego.getPuntos() > 5000) && !(juego.juegoGanado())) {

            ventanaJuego.dibujar(juego.getTablero(), juego.getPuntos(), juego.getCantidadTurnos());
        } else {
            ventanaMenu.dispose();
            if (juego.juegoGanado()) {
                ventanaMenu.juegoGanado(juego.getPuntos());
            } else {
                ventanaMenu.juegoPerdido();
            }

        }

    }

    public void cargar() throws IOException, ClassNotFoundException {
        InputStream fis = new FileInputStream("juego.dat");
        ObjectInputStream ois = new ObjectInputStream(fis);
        juego = (Juego) ois.readObject();
        // System.out.println(juegoo.getPuntos());
        ventanaJuego.setVistas(juego.getVistasBarcos());
        ventanaJuego.dibujar(juego.getTablero(), juego.getPuntos(), juego.getCantidadTurnos());
        ventanaMenu.mostrarJuego();
    }

    public void guardar() throws IOException {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("juego.dat");
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(fos);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        try {
            oos.writeObject(juego);
            System.out.println("Guarda");
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        oos.close();
        fos.close();

    }

    public static void main(String[] args) {
        ControladorJuego c = new ControladorJuego();
        c.comenzarJuego();
    }

    public void salir() {
        ventanaMenu.pullThePlug();

    }

    public void salirAMenu() {
        ventanaMenu.salirAMenu();

    }
}
